# Always print this out before your assignment
sessionInfo()
R version 4.1.2 (2021-11-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sf_1.0-4 leafgl_0.1.1 htmltools_0.5.2 leaflet_2.0.4.1
[5] shiny_1.7.1 Matrix_1.3-4 DiagrammeR_1.0.6.1 xgboost_1.5.0.2
[9] lubridate_1.8.0 ggmap_3.0.0 rsample_0.1.1 forcats_0.5.1
[13] stringr_1.4.0 dplyr_1.0.7 purrr_0.3.4 readr_2.1.0
[17] tidyr_1.1.4 tibble_3.1.6 ggplot2_3.3.5 tidyverse_1.3.1
[21] here_1.0.1 knitr_1.36
loaded via a namespace (and not attached):
[1] colorspace_2.0-2 rjson_0.2.20 ellipsis_0.3.2
[4] class_7.3-19 rprojroot_2.0.2 fs_1.5.0
[7] rstudioapi_0.13 proxy_0.4-26 farver_2.1.0
[10] listenv_0.8.0 furrr_0.2.3 fansi_0.5.0
[13] xml2_1.3.2 codetools_0.2-18 cachem_1.0.6
[16] jsonlite_1.7.2 broom_0.7.10 dbplyr_2.1.1
[19] png_0.1-7 jsonify_1.2.1 compiler_4.1.2
[22] httr_1.4.2 backports_1.3.0 assertthat_0.2.1
[25] fastmap_1.1.0 cli_3.1.0 later_1.3.0
[28] leaflet.providers_1.9.0 visNetwork_2.1.0 tools_4.1.2
[31] gtable_0.3.0 glue_1.5.0 Rcpp_1.0.7
[34] cellranger_1.1.0 jquerylib_0.1.4 vctrs_0.3.8
[37] crosstalk_1.2.0 xfun_0.28 globals_0.14.0
[40] rvest_1.0.2 mime_0.12 lifecycle_1.0.1
[43] future_1.23.0 scales_1.1.1 hms_1.1.1
[46] promises_1.2.0.1 parallel_4.1.2 RColorBrewer_1.1-2
[49] yaml_2.2.1 sass_0.4.0 stringi_1.7.5
[52] e1071_1.7-9 RgoogleMaps_1.4.5.3 rlang_0.4.12
[55] pkgconfig_2.0.3 bitops_1.0-7 evaluate_0.14
[58] lattice_0.20-45 htmlwidgets_1.5.4 labeling_0.4.2
[61] tidyselect_1.1.1 parallelly_1.29.0 plyr_1.8.6
[64] magrittr_2.0.1 R6_2.5.1 generics_0.1.1
[67] DBI_1.1.1 pillar_1.6.4 haven_2.4.3
[70] withr_2.4.3 units_0.7-2 sp_1.4-6
[73] modelr_0.1.8 crayon_1.4.2 KernSmooth_2.23-20
[76] utf8_1.2.2 tzdb_0.2.0 rmarkdown_2.11
[79] jpeg_0.1-9 grid_4.1.2 readxl_1.3.1
[82] data.table_1.14.2 reprex_2.0.1 digest_0.6.28
[85] classInt_0.4-3 xtable_1.8-4 httpuv_1.6.3
[88] munsell_0.5.0 bslib_0.3.1
getwd()
[1] "C:/Users/Daniel/Documents/GitHub/MGSC-310-Project"
library("here")
here() starts at C:/Users/Daniel/Documents/GitHub/MGSC-310-Project
library("tidyverse")
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages -------------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.5 v purrr 0.3.4
v tibble 3.1.6 v dplyr 1.0.7
v tidyr 1.1.4 v stringr 1.4.0
v readr 2.1.0 v forcats 0.5.1
-- Conflicts ----------------------------------------------- tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library("forcats")
library("rsample")
library("ggplot2")
library("ggmap")
Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
Please cite ggmap if you use it! See citation("ggmap") for details.
library("dplyr")
library("lubridate")
Attaching package: ‘lubridate’
The following objects are masked from ‘package:base’:
date, intersect, setdiff, union
library("xgboost")
Registered S3 method overwritten by 'data.table':
method from
print.data.table
Attaching package: ‘xgboost’
The following object is masked from ‘package:dplyr’:
slice
library('DiagrammeR')
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
library('Matrix')
Attaching package: ‘Matrix’
The following objects are masked from ‘package:tidyr’:
expand, pack, unpack
crashes <- read.csv(here("datasets", "US_Accidents_Dec20_updated.csv"))
summary(crashes)
ID Severity Start_Time End_Time
Length:1516064 Min. :1.000 Length:1516064 Length:1516064
Class :character 1st Qu.:2.000 Class :character Class :character
Mode :character Median :2.000 Mode :character Mode :character
Mean :2.239
3rd Qu.:2.000
Max. :4.000
Start_Lat Start_Lng End_Lat End_Lng
Min. :24.57 Min. :-124.50 Min. :24.57 Min. :-124.50
1st Qu.:33.85 1st Qu.:-118.21 1st Qu.:33.85 1st Qu.:-118.21
Median :37.35 Median : -94.38 Median :37.35 Median : -94.38
Mean :36.90 Mean : -98.60 Mean :36.90 Mean : -98.60
3rd Qu.:40.73 3rd Qu.: -80.87 3rd Qu.:40.73 3rd Qu.: -80.87
Max. :49.00 Max. : -67.11 Max. :49.08 Max. : -67.11
Distance.mi. Description Number Street
Min. : 0.0000 Length:1516064 Min. : 0 Length:1516064
1st Qu.: 0.0000 Class :character 1st Qu.: 1212 Class :character
Median : 0.1780 Mode :character Median : 4000 Mode :character
Mean : 0.5873 Mean : 8908
3rd Qu.: 0.5940 3rd Qu.: 10100
Max. :155.1860 Max. :9999997
NA's :1046095
Side City County State
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Zipcode Country Timezone Airport_Code
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Weather_Timestamp Temperature.F. Wind_Chill.F. Humidity...
Length:1516064 Min. :-89.00 Min. :-89.0 Min. : 1.00
Class :character 1st Qu.: 47.00 1st Qu.: 40.8 1st Qu.: 48.00
Mode :character Median : 61.00 Median : 57.0 Median : 68.00
Mean : 59.58 Mean : 55.1 Mean : 64.66
3rd Qu.: 73.00 3rd Qu.: 71.0 3rd Qu.: 84.00
Max. :170.60 Max. :113.0 Max. :100.00
NA's :43033 NA's :449316 NA's :45509
Pressure.in. Visibility.mi. Wind_Direction Wind_Speed.mph.
Min. : 0.00 Min. : 0.00 Length:1516064 Min. : 0.00
1st Qu.:29.44 1st Qu.: 10.00 Class :character 1st Qu.: 4.60
Median :29.88 Median : 10.00 Mode :character Median : 7.00
Mean :29.55 Mean : 9.13 Mean : 7.63
3rd Qu.:30.04 3rd Qu.: 10.00 3rd Qu.: 10.40
Max. :58.04 Max. :140.00 Max. :984.00
NA's :36274 NA's :44211 NA's :128862
Precipitation.in. Weather_Condition Amenity Bump
Min. : 0 Length:1516064 Length:1516064 Length:1516064
1st Qu.: 0 Class :character Class :character Class :character
Median : 0 Mode :character Mode :character Mode :character
Mean : 0
3rd Qu.: 0
Max. :24
NA's :510549
Crossing Give_Way Junction No_Exit
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Railway Roundabout Station Stop
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Traffic_Calming Traffic_Signal Turning_Loop Sunrise_Sunset
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Civil_Twilight Nautical_Twilight Astronomical_Twilight
Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
crashes_clean <-
crashes %>%
mutate(Start_Time_Clean = ymd_hms(Start_Time),
End_Time_Clean = ymd_hms(End_Time),
Weather_Condition_Clean = as.factor(Weather_Condition),
Wind_Direction_Clean = as.factor(Wind_Direction),
Weather_Timestamp_Clean = ymd_hms(Weather_Timestamp),
State_Clean = as.factor(State),
County_Clean = as.factor(County),
City_Clean = as.factor(City),
Side_Clean = as.factor(Side))
summary(crashes_clean)
ID Severity Start_Time End_Time
Length:1516064 Min. :1.000 Length:1516064 Length:1516064
Class :character 1st Qu.:2.000 Class :character Class :character
Mode :character Median :2.000 Mode :character Mode :character
Mean :2.239
3rd Qu.:2.000
Max. :4.000
Start_Lat Start_Lng End_Lat End_Lng
Min. :24.57 Min. :-124.50 Min. :24.57 Min. :-124.50
1st Qu.:33.85 1st Qu.:-118.21 1st Qu.:33.85 1st Qu.:-118.21
Median :37.35 Median : -94.38 Median :37.35 Median : -94.38
Mean :36.90 Mean : -98.60 Mean :36.90 Mean : -98.60
3rd Qu.:40.73 3rd Qu.: -80.87 3rd Qu.:40.73 3rd Qu.: -80.87
Max. :49.00 Max. : -67.11 Max. :49.08 Max. : -67.11
Distance.mi. Description Number Street
Min. : 0.0000 Length:1516064 Min. : 0 Length:1516064
1st Qu.: 0.0000 Class :character 1st Qu.: 1212 Class :character
Median : 0.1780 Mode :character Median : 4000 Mode :character
Mean : 0.5873 Mean : 8908
3rd Qu.: 0.5940 3rd Qu.: 10100
Max. :155.1860 Max. :9999997
NA's :1046095
Side City County State
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Zipcode Country Timezone Airport_Code
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Weather_Timestamp Temperature.F. Wind_Chill.F. Humidity...
Length:1516064 Min. :-89.00 Min. :-89.0 Min. : 1.00
Class :character 1st Qu.: 47.00 1st Qu.: 40.8 1st Qu.: 48.00
Mode :character Median : 61.00 Median : 57.0 Median : 68.00
Mean : 59.58 Mean : 55.1 Mean : 64.66
3rd Qu.: 73.00 3rd Qu.: 71.0 3rd Qu.: 84.00
Max. :170.60 Max. :113.0 Max. :100.00
NA's :43033 NA's :449316 NA's :45509
Pressure.in. Visibility.mi. Wind_Direction Wind_Speed.mph.
Min. : 0.00 Min. : 0.00 Length:1516064 Min. : 0.00
1st Qu.:29.44 1st Qu.: 10.00 Class :character 1st Qu.: 4.60
Median :29.88 Median : 10.00 Mode :character Median : 7.00
Mean :29.55 Mean : 9.13 Mean : 7.63
3rd Qu.:30.04 3rd Qu.: 10.00 3rd Qu.: 10.40
Max. :58.04 Max. :140.00 Max. :984.00
NA's :36274 NA's :44211 NA's :128862
Precipitation.in. Weather_Condition Amenity Bump
Min. : 0 Length:1516064 Length:1516064 Length:1516064
1st Qu.: 0 Class :character Class :character Class :character
Median : 0 Mode :character Mode :character Mode :character
Mean : 0
3rd Qu.: 0
Max. :24
NA's :510549
Crossing Give_Way Junction No_Exit
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Railway Roundabout Station Stop
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Traffic_Calming Traffic_Signal Turning_Loop Sunrise_Sunset
Length:1516064 Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
Civil_Twilight Nautical_Twilight Astronomical_Twilight
Length:1516064 Length:1516064 Length:1516064
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
Start_Time_Clean End_Time_Clean
Min. :2016-02-08 00:37:08 Min. :2016-02-08 06:37:08
1st Qu.:2018-07-17 14:41:25 1st Qu.:2018-07-17 17:13:14
Median :2020-01-24 11:16:33 Median :2020-01-24 13:38:15
Mean :2019-07-15 07:01:48 Mean :2019-07-15 11:42:20
3rd Qu.:2020-10-22 13:01:30 3rd Qu.:2020-10-22 17:50:19
Max. :2020-12-31 23:28:56 Max. :2021-01-01 00:00:00
Weather_Condition_Clean Wind_Direction_Clean Weather_Timestamp_Clean
Fair :465252 CALM :202870 Min. :2016-02-08 00:53:00
Mostly Cloudy:193595 Calm : 79192 1st Qu.:2018-07-10 10:55:30
Clear :180223 WNW : 77743 Median :2020-01-22 05:53:00
Cloudy :161291 NW : 75810 Mean :2019-07-12 00:02:11
Partly Cloudy:133102 W : 72059 3rd Qu.:2020-10-21 04:54:00
Overcast : 87853 SSW : 69901 Max. :2020-12-31 23:35:00
(Other) :294748 (Other):938489 NA's :30264
State_Clean County_Clean City_Clean Side_Clean
CA :448833 Los Angeles : 138819 Los Angeles: 39984 L: 221502
FL :153007 Orange : 49833 Miami : 36233 R:1294562
OR : 87484 Miami-Dade : 47382 Charlotte : 22203
TX : 75142 San Bernardino: 30251 Houston : 20843
NY : 60974 San Diego : 26623 Dallas : 19497
MN : 52345 Sacramento : 25941 Sacramento : 18431
(Other):638279 (Other) :1197215 (Other) :1358873
qmplot(Start_Lng, Start_Lat, data = crashes, maptype = "toner-lite", color = factor(Severity))
Using zoom = 4...
Source : http://tile.stamen.com/terrain/4/2/5.png
Source : http://tile.stamen.com/terrain/4/3/5.png
Source : http://tile.stamen.com/terrain/4/4/5.png
Source : http://tile.stamen.com/terrain/4/5/5.png
Source : http://tile.stamen.com/terrain/4/2/6.png
Source : http://tile.stamen.com/terrain/4/3/6.png
Source : http://tile.stamen.com/terrain/4/4/6.png
Source : http://tile.stamen.com/terrain/4/5/6.png

qmplot(End_Lng, End_Lat, data = crashes, maptype = "toner-lite", color = factor(Severity))
ggplot(data = crashes_clean, aes(x = Severity)) + geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data = crashes_clean, aes(x = Start_Time_Clean, y = Distance.mi.)) + geom_line()

NA
NA
crashes_clean %>%
ggplot(aes(Start_Time_Clean)) + geom_histogram(binwidth = 86400)

crashes_clean %>%
mutate(wday = wday(Start_Time, label = TRUE)) %>%
ggplot(aes(x = wday)) +
geom_bar()

NA
NA
NA
crashes_split <- initial_split(crashes_clean, prop = 0.75)
crashes_train <- training(crashes_split)
crashes_test <- testing(crashes_split)
crashes_xgb <- crashes %>%
select(-ID,
-Description,
-Street,
-Weather_Timestamp,
-Number,
-Airport_Code,
-Country,
-Turning_Loop) %>%
drop_na()
crashes_split_xgb <- initial_split(crashes_xgb, prop = 0.75)
crashes_train_xbg <- training(crashes_split_xgb)
crashes_test_xbg <- testing(crashes_split_xgb)
sparse_matrix_train <- sparse.model.matrix(Severity ~ .-1, data = crashes_train_xbg)
sparse_matrix_test <- sparse.model.matrix(Severity ~ .-1, data = crashes_test_xbg)
y_train <- as.integer(crashes_train_xbg$Severity) - 1
y_test <- as.integer(crashes_test_xbg$Severity) - 1
xgb_train <- xgb.DMatrix(data = sparse_matrix_train, label = y_train)
xgb_test <- xgb.DMatrix(data = sparse_matrix_test, label = y_test)
xgb <- xgboost(data = xgb_train,
eta = 0.1,
max_depth = 15,
nround=15,
subsample = 0.5,
colsample_bytree = 0.5,
seed = 1,
eval_metric = "merror",
objective = "multi:softprob",
num_class = 12,
nthread = 3
)
[1] train-merror:0.125608
[2] train-merror:0.123866
[3] train-merror:0.119900
[4] train-merror:0.118988
[5] train-merror:0.118037
[6] train-merror:0.117486
[7] train-merror:0.117051
[8] train-merror:0.115857
[9] train-merror:0.115532
[10] train-merror:0.115065
[11] train-merror:0.114324
[12] train-merror:0.113583
[13] train-merror:0.113274
[14] train-merror:0.112928
[15] train-merror:0.112617
y_pred <- predict(xgb, newdata = xgb_train)
print(length(y_pred))
[1] 8492208
print(head(y_pred))
[1] 0.07326703 0.55481678 0.06509762 0.05709703 0.03121519 0.03121519
print(paste("test-error=", err))
[1] "test-error= 0.0723034574753704"
LS0tDQp0aXRsZTogIkZpbmFsIFByb2plY3QiDQphdXRob3I6ICJEZXJlayBNaWxhbmksIE5hc3NlciBBbGphc3NlciwgTGlzYSBQaGFtLCBEYW5pZWwgQ2hlbGxpbmciDQpzdWJ0aXRsZTogTUdTQyAzMTAgUHJvamVjdCANCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KLS0tDQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCiMgUGxlYXNlIGxlYXZlIHRoaXMgY29kZSBjaHVuayBhcyBpcy4gSXQgbWFrZXMgc29tZSBzbGlnaHQgZm9ybWF0dGluZyBjaGFuZ2VzIHRvIGFsdGVyIHRoZSBvdXRwdXQgdG8gYmUgbW9yZSBhZXN0aGV0aWNhbGx5IHBsZWFzaW5nLiANCg0KbGlicmFyeShrbml0cikNCg0KIyBDaGFuZ2UgdGhlIG51bWJlciBpbiBzZXQgc2VlZCB0byB5b3VyIG93biBmYXZvcml0ZSBudW1iZXINCnNldC5zZWVkKDE4MTgpDQpvcHRpb25zKHdpZHRoPTcwKQ0Kb3B0aW9ucyhzY2lwZW49OTkpDQoNCg0KIyB0aGlzIHNldHMgdGV4dCBvdXRwdXR0ZWQgaW4gY29kZSBjaHVua3MgdG8gc21hbGwNCm9wdHNfY2h1bmskc2V0KHRpZHkub3B0cz1saXN0KHdpZHRoLndyYXA9NTApLHRpZHk9VFJVRSwgc2l6ZSA9ICJ2c21hbGwiKSAgDQpvcHRzX2NodW5rJHNldChtZXNzYWdlID0gRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsDQogICAgICAgICAgICAgICAjICJjYWNoaW5nIiBzdG9yZXMgb2JqZWN0cyBpbiBjb2RlIGNodW5rcyBhbmQgb25seSByZXdyaXRlcyBpZiB5b3UgY2hhbmdlIHRoaW5ncw0KICAgICAgICAgICAgICAgY2FjaGUgPSBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAjIGF1dG9tYXRpY2FsbHkgZG93bmxvYWRzIGRlcGVuZGVuY3kgZmlsZXMNCiAgICAgICAgICAgICAgIGF1dG9kZXAgPSBUUlVFLA0KICAgICAgICAgICAgICAgIyANCiAgICAgICAgICAgICAgIGNhY2hlLmNvbW1lbnRzID0gRkFMU0UsDQogICAgICAgICAgICAgICAjIA0KICAgICAgICAgICAgICAgY29sbGFwc2UgPSBUUlVFLA0KICAgICAgICAgICAgICAgIyBjaGFuZ2UgZmlnLndpZHRoIGFuZCBmaWcuaGVpZ2h0IHRvIGNoYW5nZSB0aGUgY29kZSBoZWlnaHQgYW5kIHdpZHRoIGJ5IGRlZmF1bHQNCiAgICAgICAgICAgICAgIGZpZy53aWR0aCA9IDUuNSwgIA0KICAgICAgICAgICAgICAgZmlnLmhlaWdodCA9IDQuNSwNCiAgICAgICAgICAgICAgIGZpZy5hbGlnbj0nY2VudGVyJykNCg0KDQpgYGANCg0KYGBge3Igc2V0dXAtMn0NCg0KIyBBbHdheXMgcHJpbnQgdGhpcyBvdXQgYmVmb3JlIHlvdXIgYXNzaWdubWVudA0Kc2Vzc2lvbkluZm8oKQ0KZ2V0d2QoKQ0KDQpgYGANCg0KDQo8IS0tICMjIyBzdGFydCBhbnN3ZXJpbmcgeW91ciBwcm9ibGVtIHNldCBoZXJlIC0tPg0KPCEtLSBZb3UgbWF5IGV4cG9ydCB5b3VyIGhvbWV3b3JrIGluIGVpdGhlciBodG1sIG9yIHBkZiwgd2l0aCB0aGUgZm9ybWVyIHVzdWFsbHkgYmVpbmcgZWFzaWVyLiANCiAgICAgVG8gZXhwb3J0IG9yIGNvbXBpbGUgeW91ciBSbWQgZmlsZTogY2xpY2sgYWJvdmUgb24gJ0tuaXQnIHRoZW4gJ0tuaXQgdG8gSFRNTCcgLS0+DQo8IS0tIEJlIHN1cmUgdG8gc3VibWl0IGJvdGggeW91ciAuUm1kIGZpbGUgYW5kIHRoZSBjb21waWxlZCAuaHRtbCBvciAucGRmIGZpbGUgZm9yIGZ1bGwgY3JlZGl0IC0tPg0KDQoNCmBgYHtyIHNldHVwLTN9DQoNCmxpYnJhcnkoImhlcmUiKQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoImZvcmNhdHMiKQ0KbGlicmFyeSgicnNhbXBsZSIpDQpsaWJyYXJ5KCJnZ3Bsb3QyIikNCmxpYnJhcnkoImdnbWFwIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoImx1YnJpZGF0ZSIpDQpsaWJyYXJ5KCJ4Z2Jvb3N0IikNCmxpYnJhcnkoJ0RpYWdyYW1tZVInKQ0KbGlicmFyeSgnTWF0cml4JykNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KY3Jhc2hlcyA8LSByZWFkLmNzdihoZXJlKCJkYXRhc2V0cyIsICJVU19BY2NpZGVudHNfRGVjMjBfdXBkYXRlZC5jc3YiKSkNCg0KDQpgYGANCg0KYGBge3J9DQoNCnN1bW1hcnkoY3Jhc2hlcykNCg0KDQpgYGANCg0KYGBge3J9DQoNCg0KY3Jhc2hlc19jbGVhbiA8LQ0KICBjcmFzaGVzICU+JSANCiAgbXV0YXRlKFN0YXJ0X1RpbWVfQ2xlYW4gPSB5bWRfaG1zKFN0YXJ0X1RpbWUpLA0KICAgICAgICAgRW5kX1RpbWVfQ2xlYW4gPSB5bWRfaG1zKEVuZF9UaW1lKSwNCiAgICAgICAgIFdlYXRoZXJfQ29uZGl0aW9uX0NsZWFuID0gYXMuZmFjdG9yKFdlYXRoZXJfQ29uZGl0aW9uKSwNCiAgICAgICAgIFdpbmRfRGlyZWN0aW9uX0NsZWFuID0gYXMuZmFjdG9yKFdpbmRfRGlyZWN0aW9uKSwNCiAgICAgICAgIFdlYXRoZXJfVGltZXN0YW1wX0NsZWFuID0geW1kX2htcyhXZWF0aGVyX1RpbWVzdGFtcCksDQogICAgICAgICBTdGF0ZV9DbGVhbiA9IGFzLmZhY3RvcihTdGF0ZSksDQogICAgICAgICBDb3VudHlfQ2xlYW4gPSBhcy5mYWN0b3IoQ291bnR5KSwNCiAgICAgICAgIENpdHlfQ2xlYW4gPSBhcy5mYWN0b3IoQ2l0eSksDQogICAgICAgICBTaWRlX0NsZWFuID0gYXMuZmFjdG9yKFNpZGUpKQ0KICANCg0Kc3VtbWFyeShjcmFzaGVzX2NsZWFuKQ0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpxbXBsb3QoU3RhcnRfTG5nLCBTdGFydF9MYXQsIGRhdGEgPSBjcmFzaGVzLCBtYXB0eXBlID0gInRvbmVyLWxpdGUiLCBjb2xvciA9IGZhY3RvcihTZXZlcml0eSkpDQoNCnFtcGxvdChFbmRfTG5nLCBFbmRfTGF0LCBkYXRhID0gY3Jhc2hlcywgbWFwdHlwZSA9ICJ0b25lci1saXRlIiwgY29sb3IgPSBmYWN0b3IoU2V2ZXJpdHkpKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCg0KZ2dwbG90KGRhdGEgPSBjcmFzaGVzX2NsZWFuLCBhZXMoeCA9IFNldmVyaXR5KSkgKyBnZW9tX2hpc3RvZ3JhbSgpDQoNCg0KDQpgYGANCg0KYGBge3J9DQoNCmdncGxvdChkYXRhID0gY3Jhc2hlc19jbGVhbiwgYWVzKHggPSBTdGFydF9UaW1lX0NsZWFuLCB5ID0gRGlzdGFuY2UubWkuKSkgKyBnZW9tX2xpbmUoKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCg0KY3Jhc2hlc19jbGVhbiAlPiUgDQogIGdncGxvdChhZXMoU3RhcnRfVGltZV9DbGVhbikpICsgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSA4NjQwMCkNCg0KYGBgDQoNCmBgYHtyfQ0KDQpjcmFzaGVzX2NsZWFuICU+JSANCiAgbXV0YXRlKHdkYXkgPSB3ZGF5KFN0YXJ0X1RpbWUsIGxhYmVsID0gVFJVRSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gd2RheSkpICsNCiAgICBnZW9tX2JhcigpDQoNCg0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KDQpjcmFzaGVzX3NwbGl0IDwtIGluaXRpYWxfc3BsaXQoY3Jhc2hlc19jbGVhbiwgcHJvcCA9IDAuNzUpDQoNCmNyYXNoZXNfdHJhaW4gPC0gdHJhaW5pbmcoY3Jhc2hlc19zcGxpdCkNCmNyYXNoZXNfdGVzdCA8LSB0ZXN0aW5nKGNyYXNoZXNfc3BsaXQpDQoNCg0KYGBgDQoNCmBgYHtyfQ0KDQpjcmFzaGVzX3hnYiA8LSBjcmFzaGVzICU+JSANCiAgc2VsZWN0KC1JRCwNCiAgICAgICAgIC1EZXNjcmlwdGlvbiwNCiAgICAgICAgIC1TdHJlZXQsDQogICAgICAgICAtV2VhdGhlcl9UaW1lc3RhbXAsDQogICAgICAgICAtTnVtYmVyLA0KICAgICAgICAgLUFpcnBvcnRfQ29kZSwNCiAgICAgICAgIC1Db3VudHJ5LA0KICAgICAgICAgLVR1cm5pbmdfTG9vcCkgJT4lIA0KICBkcm9wX25hKCkNCg0KY3Jhc2hlc19zcGxpdF94Z2IgPC0gaW5pdGlhbF9zcGxpdChjcmFzaGVzX3hnYiwgcHJvcCA9IDAuNzUpDQoNCmNyYXNoZXNfdHJhaW5feGJnIDwtIHRyYWluaW5nKGNyYXNoZXNfc3BsaXRfeGdiKQ0KY3Jhc2hlc190ZXN0X3hiZyA8LSB0ZXN0aW5nKGNyYXNoZXNfc3BsaXRfeGdiKQ0KDQoNCnNwYXJzZV9tYXRyaXhfdHJhaW4gPC0gc3BhcnNlLm1vZGVsLm1hdHJpeChTZXZlcml0eSB+IC4tMSwgZGF0YSA9IGNyYXNoZXNfdHJhaW5feGJnKQ0Kc3BhcnNlX21hdHJpeF90ZXN0IDwtIHNwYXJzZS5tb2RlbC5tYXRyaXgoU2V2ZXJpdHkgfiAuLTEsIGRhdGEgPSBjcmFzaGVzX3Rlc3RfeGJnKQ0KDQoNCnlfdHJhaW4gPC0gYXMuaW50ZWdlcihjcmFzaGVzX3RyYWluX3hiZyRTZXZlcml0eSkgLSAxDQp5X3Rlc3QgPC0gYXMuaW50ZWdlcihjcmFzaGVzX3Rlc3RfeGJnJFNldmVyaXR5KSAtIDENCg0KeGdiX3RyYWluIDwtIHhnYi5ETWF0cml4KGRhdGEgPSBzcGFyc2VfbWF0cml4X3RyYWluLCBsYWJlbCA9IHlfdHJhaW4pDQp4Z2JfdGVzdCA8LSB4Z2IuRE1hdHJpeChkYXRhID0gc3BhcnNlX21hdHJpeF90ZXN0LCBsYWJlbCA9IHlfdGVzdCkNCg0KDQpgYGANCg0KYGBge3J9DQoNCnhnYiA8LSB4Z2Jvb3N0KGRhdGEgPSB4Z2JfdHJhaW4sDQogZXRhID0gMC4xLA0KIG1heF9kZXB0aCA9IDE1LCANCiBucm91bmQ9MTUsIA0KIHN1YnNhbXBsZSA9IDAuNSwNCiBjb2xzYW1wbGVfYnl0cmVlID0gMC41LA0KIHNlZWQgPSAxLA0KIGV2YWxfbWV0cmljID0gIm1lcnJvciIsDQogb2JqZWN0aXZlID0gIm11bHRpOnNvZnRwcm9iIiwNCiBudW1fY2xhc3MgPSAxMiwNCiBudGhyZWFkID0gMw0KKQ0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KDQp5X3ByZWQgPC0gcHJlZGljdCh4Z2IsIG5ld2RhdGEgPSB4Z2JfdHJhaW4pDQpwcmludChsZW5ndGgoeV9wcmVkKSkNCnByaW50KGhlYWQoeV9wcmVkKSkNCg0KYGBgDQoNCmBgYHtyfQ0KDQplcnIgPC0gbWVhbihhcy5udW1lcmljKHlfcHJlZCA+IDAuNSkpDQpwcmludChwYXN0ZSgidGVzdC1lcnJvcj0iLCBlcnIpKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCg0KDQp0cmVlX3Bsb3QgPC0geGdiLnBsb3QudHJlZShtb2RlbCA9IHhnYiwgdHJlZXMgPSAxLCBmZWF0dXJlLmtlZXAgPSAzKQ0KDQp0cmVlX3Bsb3QNCg0KDQpgYGANCmBgYHtyfQ0KDQppbXBvcnRhbmNlX21hdHJpeCA8LSB4Z2IuaW1wb3J0YW5jZSh4Z2JfdHJhaW5bMl0sbW9kZWwgPSB4Z2IpDQp4Z2IucGxvdC5pbXBvcnRhbmNlKGltcG9ydGFuY2VfbWF0cml4KQ0KDQoNCmltcG9ydGFuY2VfbWF0cml4DQpgYGA=